/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DickYang
 * Date: 2023-05-06
 * Time: 10:40
 */

//代码块: 1.普通代码块  2.构造代码块/非静态代码块/实例代码块  3.静态代码块
public class TestDome3 {
    private String name;
    private int age;

    public TestDome3() {
        System.out.println("无参构造方法");
    }
    public TestDome3(String name,int age) {
        this.name = name;
        this.age = age;
        System.out.println("带有两个参数的构造方法！");
    }

    //静态代码块:初始化静态的成员变量/提前准备一些数据
    static {
        //只要这个类被加载，都会执行这个静态代码块！！
        //静态代码块甚至比构造代码块还要先执行！！
        //只被执行一次
        System.out.println("静态代码块，比构造代码块先执行");
    }

    //构造代码块:初始化非静态的成员变量!!!
    {
        //在对象创建时才会被执行！！
        //调用构造方法之前先调用构造代码块！！！
//        this.name = "Yangdike";
//        this.age = 12;
        System.out.println("构造代码块定义在类的里面,方法的外面,比构造方法先执行！");
    }

    public static void func1() {
        //普通代码块
        {
            //这块代码的执行不需要条件!
            System.out.println("普通代码块定义在方法的内部");
        }
    }

    public void show() {
        System.out.println(name + " " + age);
    }

    public static void main(String[] args) {
        //静态代码块不管生成多少个对象只被执行一次！！！
        TestDome3 testDome3_1 = new TestDome3();
        System.out.println("============");
        TestDome3 testDome3_2 = new TestDome3();
    }
    public static void main2(String[] args) {
        //执行顺序：静态代码块 > 构造代码块 > 构造方法
        TestDome3 testDome3 = new TestDome3();
    }
    public static void main1(String[] args) {
        TestDome3 testDome3 = new TestDome3("ayngdike",12);
        testDome3.show();
    }
}
